﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include "GcmpModel.h"

namespace gcmp
{
    class IParameterDefinition;

    /// \brief 参数分组过滤器
    class GCMP_MODEL_EXPORT IParameterGroupsFilter
    {
    public:
        /// \brief 获取全局参数分组过滤器
        /// \return 返回全局参数分组过滤器
        static const IParameterGroupsFilter* GetParameterGroupsFilter();

        /// \brief 设置全局参数分组过滤器
        /// \param pParameterGourpsFilter 参数分组过滤器
        static void SetParameterGroupsFilter(OwnerPtr<IParameterGroupsFilter> pParameterGourpsFilter);

        /// \brief 虚拟析构函数
        virtual ~IParameterGroupsFilter() {};

        /// \brief 获取当前参数所在的组，返回组名称
        /// \param pParameterDefinition 参数定义
        /// \return 返回组名称
        virtual std::wstring GetGroupName(const gcmp::IParameterDefinition* pParameterDefinition) const = 0;

        /// \brief 所有组别排序，返回组别的索引列表
        /// \param groupsName 组名称
        /// \return 返回排序的组别的索引列表
        virtual std::vector<size_t> SortGroups(const std::vector<std::wstring>& groupsName) const = 0;

        /// \brief 参数排序，返回参数的索引
        /// \param allParameterDefinition 参数列表
        /// \return 排序的参数索引列表
        virtual std::vector<size_t> SortParameters(const std::vector<const gcmp::IParameterDefinition*>& allParameterDefinition) const = 0;
    };

}



